package com.qfedu.edu.aop;

import com.qfedu.edu.result.R;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @author xiaobobo
 * @title: FeignClientAop
 * @projectName seckill-fy-2401-parent
 * @description: TODO
 * @date 2024/11/5  14:21
 */
@Aspect    //表示是一个切面类
@Component
@Slf4j
public class FeignClientAop {
    /**
     * 这个类上 只要拥有 org.springframework.cloud.openfeign.FeignClient这个注解 那么
     * 就要为这个类生成代理
     *
     * @param proceedingJoinPoint
     * @return
     */
    @Around("@within(org.springframework.cloud.openfeign.FeignClient)")
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        try {
            log.info("AOP执行了...");
            R r = (R) proceedingJoinPoint.proceed();
            //接下来就可以判断状态码了
            if (r.getCode() == 0) {
                //说明请求成功...
                return r;
            } else {
                //说明请求是失败的...
                throw new RuntimeException("第三方服务请求失败...");
            }
        } catch (Exception err) {
            throw err;
        }
    }


}
